/**
 * 格式化数字
 * 将数字格式化为更易读的形式
 * - 大于等于10000的数字显示为xx.xw (例如: 35267 -> 35.2w)
 * - 大于等于1000的数字显示为x.xk (例如: 2667 -> 2.6k)
 * - 小于1000的数字直接显示
 * @param {number} num - 要格式化的数字
 * @returns {string|number} - 格式化后的数字
 */
export function formatNumber(num) {
    if (num >= 10000) {
        // 大于等于一万的数字，显示为xx.xw
        return (Math.floor(num / 1000) / 10) + 'w';
    } else if (num >= 1000) {
        // 大于等于一千的数字，显示为x.xk
        return (Math.floor(num / 100) / 10) + 'k';
    }
    return num;
}


/**
 * 格式化时间（传入Date类型的对象）
 * @param {Date} date - 要格式化的时间
 * @returns {string} - 格式化后的时间字符串
 */
export function formatDateTime(date) {
    // 如果传入的不是日期类型
    if (!(date instanceof Date)) {
        throw new Error('无效的日期格式！')
    }
    const year = date.getFullYear();
    const month = String(date.getMonth() + 1).padStart(2, '0'); // 月份从0开始，需加1
    const day = String(date.getDate()).padStart(2, '0');
    const hours = String(date.getHours()).padStart(2, '0');
    const minutes = String(date.getMinutes()).padStart(2, '0');
    const seconds = String(date.getSeconds()).padStart(2, '0');

    return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
}


/**
 * 格式化时间
 * 将时间字符串格式化为相对时间或日期格式
 * - 小于60分钟显示为"xx分钟前"
 * - 小于24小时显示为"xx小时前"
 * - 大于等于24小时显示为"yyyy-mm-dd"格式
 * @param {string} timeString - 要格式化的时间字符串
 * @returns {string} - 格式化后的时间字符串
 */
export function formatTime(timeString) {
    if(!timeString){
        return '';
    }
    // 1. 解析时间字符串（兼容不同格式，并处理时区）
    const targetDate = new Date(timeString);
    if (isNaN(targetDate.getTime())) {
        throw new Error('无效的时间字符串');
    }
    const now = new Date(); // 获取当前时间
    const diff = now.getTime() - targetDate.getTime(); // 计算时间差（单位：毫秒）

    // 2. 将时间差转换为分钟、小时
    const diffInMinutes = Math.floor(diff / (1000 * 60));
    const diffInHours = Math.floor(diff / (1000 * 60 * 60));

    // 3. 根据时间差返回对应的时间格式
    if (diffInMinutes < 60) {
        if(diffInMinutes < 1){
            return '刚刚';
        }
        return `${diffInMinutes}分钟前`;
    } else if (diffInHours < 24) {
        return `${diffInHours}小时前`;
    } 
    // 在本年内的都不用返回年
    else if (targetDate.getFullYear() === now.getFullYear()) {
        const month = String(targetDate.getMonth() + 1).padStart(2, '0');
        const day = String(targetDate.getDate()).padStart(2, '0');
        return `${month}-${day}`; // 仅返回 mm-dd 格式
    }
    else {
        const year = targetDate.getFullYear();
        const month = String(targetDate.getMonth() + 1).padStart(2, '0');
        const day = String(targetDate.getDate()).padStart(2, '0');
        return `${year}-${month}-${day}`; // 返回 yyyy-mm-dd 格式
    }
}


/**
 * 获取两个时间之间的间隔
 * @param {string} startTime - 开始时间
 * @param {string} endTime - 结束时间
 * @returns {number} 时间间隔的分钟数
 */
export function getTimeInterval(startTimeStr, endTimeStr) {
    let startTime = new Date(startTimeStr);
    let endTime = new Date(endTimeStr);
    const diffInMilliseconds = endTime - startTime;
    return Math.floor(diffInMilliseconds / (1000 * 60));
}



// 导出所有格式化相关的工具函数
export default {
    formatNumber,
    formatDateTime,
    formatTime,
    getTimeInterval
};